package com.king.modules.system.service;

import java.util.List;

import com.king.framework.base.service.YyBaseService;
import com.king.modules.system.domain.SysRoleEntity;
import com.king.modules.system.domain.SysUserEntity;
import com.king.modules.system.domain.SysUserRoleEntity;

/**
 * 用户 业务层
 * 
 * @author king
 */
public interface SysUserService extends YyBaseService<SysUserEntity,Long>{
	/**
	 * 根据条件分页查询用户列表
	 * 
	 * @param user
	 *            用户信息
	 * @return 用户信息集合信息
	 */
	public List<SysUserEntity> selectUserList(SysUserEntity user);

	/**
	 * 根据条件分页查询已分配用户角色列表
	 * 
	 * @param user
	 *            用户信息
	 * @return 用户信息集合信息
	 */
	public List<SysUserEntity> inSelectRoleUsers(SysUserEntity user);

	/**
	 * 根据条件分页查询未分配用户角色列表
	 * 
	 * @param user
	 *            用户信息
	 * @return 用户信息集合信息
	 */
	public List<SysUserEntity> unSelectRoleUsers(SysUserEntity user);
	
	
	
	/**
	 * 查询已选流程组用户
	 * @param user
	 * @return
	 */
	public List<SysUserEntity> inSelectProcessUsers(SysUserEntity user);

	
	/**
	 * 查询未选流程组用户
	 * @param user
	 * @return
	 */
	public List<SysUserEntity> unSelectProcessUsers(SysUserEntity user);

	/**
	 * 通过用户名查询用户
	 * 
	 * @param userName
	 *            用户名
	 * @return 用户对象信息
	 */
	public SysUserEntity selectUserByUserName(String userName);

	/**
	 * 通过用户ID查询用户
	 * 
	 * @param userId
	 *            用户ID
	 * @return 用户对象信息
	 */
	public SysUserEntity selectUserById(Long userId);

	/**
	 * 根据用户ID查询用户所属角色组
	 * 
	 * @param userName
	 *            用户名
	 * @return 结果
	 */
	public String selectUserRoles(Long userId);


	/**
	 * 校验用户名称是否唯一
	 * 
	 * @param user
	 *            用户信息
	 * @return 结果
	 */
	public String checkUserNameUnique(SysUserEntity user);

	/**
	 * 校验手机号码是否唯一
	 *
	 * @param user
	 *            用户信息
	 * @return 结果
	 */
	public String checkPhoneUnique(SysUserEntity user);

	/**
	 * 校验email是否唯一
	 *
	 * @param user
	 *            用户信息
	 * @return 结果
	 */
	public String checkEmailUnique(SysUserEntity user);

	/**
	 * 校验用户是否允许操作
	 * 
	 * @param user
	 *            用户信息
	 */
	public void checkUserAllowed(SysUserEntity user);

	/**
	 * 校验用户是否有数据权限
	 * 
	 * @param userId
	 *            用户id
	 */
	public void checkUserDataScope(Long userId);



	/**
	 * 修改用户状态
	 * 
	 * @param user
	 *            用户信息
	 * @return 结果
	 */
	public int updateUserStatus(SysUserEntity user);

	/**
	 * 修改用户基本信息
	 * 
	 * @param user
	 *            用户信息
	 * @return 结果
	 */
	public int updateUserProfile(SysUserEntity user);

	/**
	 * 修改用户头像
	 * 
	 * @param userName
	 *            用户名
	 * @param avatar
	 *            头像地址
	 * @return 结果
	 */
	public boolean updateUserAvatar(Long id, String avatar);

	/**
	 * 重置用户密码
	 * 
	 * @param user
	 *            用户信息
	 * @return 结果
	 */
	public int updateUserPwd(Long id,Long mr,  String password);


	/**
	 * 通过用户ID删除用户
	 * 
	 * @param userId
	 *            用户ID
	 * @return 结果
	 */
	public int deleteUserById(Long userId);

	/**
	 * 批量删除用户信息
	 * 
	 * @param userIds
	 *            需要删除的用户ID
	 * @return 结果
	 */
	public int deleteUserByIds(Long[] userIds);

	/**
	 * 导入用户数据
	 * 
	 * @param userList
	 *            用户数据列表
	 * @param isUpdateSupport
	 *            是否更新支持，如果已存在，则进行更新数据
	 * @param operName
	 *            操作用户
	 * @return 结果
	 */
	public String importUser(List<SysUserEntity> userList, Boolean isUpdateSupport, Long operUserId);

	/**
	 * 用户未选的角色
	 * @param userRole
	 * @return
	 */
	public List<SysRoleEntity> unSelectRoles(SysUserRoleEntity userRole);

	/**
	 * 用户已选的角色
	 * @param userRole
	 * @return
	 */
	public List<SysRoleEntity> inSelectRoles(SysUserRoleEntity userRole);

	/**
	 * 删除用户 下的角色
	 * @param userId
	 * @param roleIds
	 * @return
	 */
	public int deleteAuthRoles(Long userId, Long[] roleIds);

	/**
	 * 插入用户下的角色
	 * @param userId
	 * @param roleIds
	 * @return
	 */
	public int insertAuthRoles(Long userId, Long[] roleIds);


}
